/**
 * \file Файл описания класса MainWindow
 *
 * Файл содержит определение класса главного окна приложения
 */
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <gtkmm.h>
#include "worker.h"
#include "plot2d.h"
#include <boost/circular_buffer.hpp>
#include <boost/thread.hpp>
#include <gdkmm/rgba.h>
#include <iostream>
#include <boost/chrono.hpp>
#include "coin.h"
#include <boost/enable_shared_from_this.hpp>
#include <boost/make_shared.hpp>
/**
 * @brief Класс главного окна приложения
 *
 * Класс отнаследован от класса Gtk::Window
 * рисует все необходимые виджеты и управленет ими
 *
 */
class WebClient;
class Coin;

class MainWindow: public Gtk::Window
{
    Glib ::Dispatcher m_dispatcher;///<диспетчер потока вычисления

    Glib::Dispatcher m_dispatcherWebClient;///<диспетчер потока цикла  для WebClient
    Worker m_worker;///< ОбЪект нового потока
  //  WebClient* m_webclient;///<обЪект WebClient
    Coin* m_coin;
    boost::thread *m_thread;///< указатель на новый поток

 //   std::shared_ptr<boost::thread>* m_threadWebclient;///< указатель на поток выполнения

protected:

    bool m_run_en=0;
    Gtk::Box                    m_BoxMain;
    Gtk::Grid                   m_GridUp, m_GridDown;
    Gtk::Box                    m_BoxPlot;
    Gtk::Button                 m_Button1, m_Button2, m_Button3, m_Button4, m_Button5, m_Button6,m_Button7, m_Button8, m_Button9, m_Button10,m_ButtonTest;
    Gtk::Frame                  m_FrameLeft;
    Gtk::AspectFrame            m_AFrame;
    Plot2D *Plot;
    void ButtonTestClicked();
    void Button2Clicked();
    void Button3Clicked();
    void Button4Clicked();
    void Button5Clicked();
    void Button6Clicked();
    void Button7Clicked();
    void Button8Clicked();
    void Button9Clicked();
    void Button10Clicked();
  //  void OnNotificationIOC();///уведомления от потока IOC
    void OnNotificationWebClient();///уведомления от потока WebClient
    boost::shared_ptr<Coin> coin_btc;
public:

    MainWindow();
    void Notify();                                              //уведобление от потока
    void OnNotification();                                     //обработка уведовления от потока
};
#endif // MAINWINDOW_H
